package com.dkd.day20250727;

import java.util.LinkedList;
import java.util.Scanner;

public class Main39 {
    //题目描述
    //请实现一个简易内存池,根据请求命令完成内存分配和释放。
    //内存池支持两种操作命令，REQUEST和RELEASE，其格式为：
    //REQUEST=请求的内存大小 表示请求分配指定大小内存，如果分配成功，返回分配到的内存首地址；如果内存不足，或指定的大小为0，则输出error。
    //RELEASE=释放的内存首地址 表示释放掉之前分配的内存，释放成功无需输出，如果释放不存在的首地址则输出error。
    //注意：
    //
    //内存池总大小为100字节。
    //内存池地址分配必须是连续内存，并优先从低地址分配。
    //内存释放后可被再次分配，已释放的内存在空闲时不能被二次释放。
    //不会释放已申请的内存块的中间地址。
    //释放操作只是针对首地址所对应的单个内存块进行操作，不会影响其它内存块。
    //输入描述
    //首行为整数 N , 表示操作命令的个数，取值范围：0 < N <= 100。
    //
    //接下来的N行, 每行将给出一个操作命令，操作命令和参数之间用 “=”分割。
    //
    //输出描述
    //请求分配指定大小内存时，如果分配成功，返回分配到的内存首地址；如果内存不足，或指定的大小为0，则输出error
    //
    //释放掉之前分配的内存时，释放成功无需输出，如果释放不存在的首地址则输出error。

    public static void main(String[] args) {
        //获取数据
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] strs = new String[n];
        for (int i = 0; i < n; i++) {
            strs[i] = sc.next();
        }

        solve(strs);
    }


    public static void solve(String[] str) {
        //准备，已经使用数据，并添加尾巴节点。
        LinkedList<Integer[]> used = new LinkedList<>();
        used.add(new Integer[]{100,101});

        //分割字符
        for (String s : str) {
            String[] split = s.split("=");
            String s1 = split[0];
            int n1 = Integer.parseInt(split[1]);
            if(s1.equals("REQUEST")) {
                int start =0;
                boolean flag = true;
                for(int i =0; i< used.size(); i++) {
                    int end = start + n1 -1;
                    Integer[] arr = new Integer[]{start,end};
                    if(!get(used.get(i),arr)) {
                        used.add(i,arr);
                        flag = false;
                        System.out.println(start);
                        break;
                    }else {
                        start = used.get(i)[1] +1;
                    }
                }
                if(flag) System.out.println("error");
            }else if(s1.equals("RELEASE")) {
                boolean flag = true;
                for(int i =0; i< used.size(); i++) {
                    if(used.get(i)[0] == n1) {
                        flag = false;
                        used.remove(i);
                        break;
                    }
                }

                if(flag) System.out.println("error");
            }

        }
    }


    public static boolean get(Integer[] s1, Integer[] s2) {
        if (s1[0] == s2[0]) {
            return true;
        }else if(s1[0] > s2[0]) {
            return s2[1] >= s1[0];

        }else{
           return s1[1]>=  s2[0];
        }
    }
}
